package com.charley.icloud.admin.webapps.sysuser.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.charley.icloud.admin.common.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 类说明 用户表对应实体（MybatisPlus)
 *
 * @author charley
 * @date 2024-04-24 09:54
 */
@Data
@TableName("sys_user")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@JsonIgnoreProperties(value = {"password","salt"}, allowSetters = true)
public class SysUserDO extends BaseEntity implements Serializable {

    private static final long serialVersionUID = -5886012896705137070L;

    /**
     * 账号：唯一值，自动生成，后期可由用户自定义修改
     */
    @TableField("account")
    private String account;

    /**
     * 用户名
     */
    @TableField("username")
    private String username;

    /**
     * 密码
     */
    @TableField("password")
    private String password;

    /**
     * 加密盐
     */
    @TableField("salt")
    private String salt;

    /**
     * 昵称
     */
    @TableField(value = "nick_name")
    private String nickName;

    /**
     * 头像
     */
    @TableField(value = "head_img_url")
    private String headImgUrl;

    /**
     * 联系方式：手机号
     */
    @TableField("phone")
    private String phone;

    /**
     * 联系方式：邮箱
     */
    @TableField("email")
    private String email;

    /**
     * 性别： 1男2女0隐藏
     */
    @TableField("sex")
    private Byte sex = (byte) 0;

    /**
     * 用户账号状态
     */
    @TableField("status")
    private Byte status = (byte)1;

    /**
     * 用户类型 0超级管理员、1管理员、2会员用户、3普通用户、4临时用户
     */
    @TableField("type")
    private Byte type;

    /**
     * 会员用户身份级别：0布衣 1青铜、2白银、3黄金、4白金、5黑金、6星钻
     */
    @TableField("level")
    private Byte level = (byte)0;

    /**
     * 会员有效期截止时间
     */
    @TableField("validity_time")
    private Date validityTime;

    /**
     * 账号失效时间，超过时间将不能登录系统
     */
    @TableField("expired_time")
    private Date expiredTime;

    /**
     * 最近修改密码时间，超出时间间隔，提示用户修改密码
     */
    @TableField("last_change_pwd_time")
    private Date lastChangePwdTime;

    /**
     * 最后登录时间
     */
    @TableField("last_login")
    private Date lastLogin;

    /**
     * 限制允许登录的IP集合
     */
    @TableField("limited_ip")
    private String limitedIp;

    /**
     * 是否允许账号同一个时刻多人在线 Y/N
     */
    @TableField("limit_multi_login")
    private Character limitMultiLogin = 'Y';

    /**
     * 软删除标记 0正常 -1删除
     */
    @TableField(value = "del_flag")
    private Byte delFlag = (byte)0;

    // 非数据库字段
    private String deptName;
    // 非数据库字段
    private String roleNames;
    // 非数据库字段
    //private List<SysUserRole> userRoles = new ArrayList<>();

}
